#include "stdafx.h"
#include "Font.h"
#include "SDL_ttf.h"

using namespace std;

namespace ZeEngine
{
    Font::Font(const string& strPath, const string& strName, const string& strGroup) : Resource(strPath, strName, strGroup)
    {
    }

    Font::~Font()
    {
    }

    bool Font::Load(ResourceLoader& loader)
    {
        SetLoaded(true);
        return true;
    }

    void Font::Unload(ResourceLoader& loader)
    {
        if (IsLoaded())
        {
            for (auto it = m_pFonts.begin(); it != m_pFonts.end(); ++it)
            {
                TTF_CloseFont(it->second);
            }

            m_pFonts.clear();
        }

        SetLoaded(false);
    }

    TTF_Font* Font::GetFont(u32 size)
    {
        TTF_Font* pFont = NULL;

        auto it = m_pFonts.find(size);

        if (it != m_pFonts.end())
        {
            pFont = it->second;
        }
        else
        {
            pFont = TTF_OpenFont( GetPath().c_str(), size );

            if (pFont == NULL)
            {
                LOG_ERROR("Failed to load font " + GetPath() + " SDL_ttf Error: " + string(TTF_GetError()));
            }
            else
            {
                m_pFonts.insert(pair<u32, TTF_Font*>(size, pFont));
            }
        }

        return pFont;
    }
}